package com.common.base.utils

/**
 *
 * 作者：sosou
 *
 * 版本：1.0
 *
 * 创建日期：2023/2/4
 *
 * 描述：分页类
 *
 * 修订历史：
 *
 */
class Page {

    /**
     * 第一个默认页标
     */
    val FIRST_PAGE = 1

    /**
     * 当前页标数
     */
    var pageNo = FIRST_PAGE

    /**
     * 已加载页数
     */
    var oldPageNo = FIRST_PAGE

    /**
     * 分页数
     */
    var pageSize = 5

    /**
     * 有下一页
     */
    var hasNext = true

    /**
     * 是分页加载中
     */
    private var isPageLoading = false

    init {
        reset()
    }

    /**
     *
     * [简要描述]:不能加载下一页<br></br>
     * [详细描述]:没有下一页<br></br>
     *
     */
    fun noNext() {
        hasNext = false
        loadFail()
    }

    /**
     *
     * [简要描述]:下一页<br></br>
     * [详细描述]:下一页<br></br>
     *
     * @return hasNext
     */
    operator fun hasNext(): Boolean {
        return hasNext
    }

    /**
     *
     * [简要描述]:是分页加载中<br></br>
     * [详细描述]:是分页加载中<br></br>
     *
     * @return 是分页加载中
     */
    fun isPageLoading(): Boolean {
        return isPageLoading
    }

    /**
     *
     * [简要描述]:是可以加载<br></br>
     * [详细描述]:是可以加载<br></br>
     *
     * @return 不是分页增加中及没有下一页
     */
    fun isCanLoad(): Boolean {
        return !isPageLoading && hasNext
    }

    /**
     *
     * [简要描述]:加载成功<br></br>
     * [详细描述]:加载成功<br></br>
     *
     */
    fun loadSucc() {
        isPageLoading = false
    }

    /**
     *
     * [简要描述]:下一页<br></br>
     * [详细描述]:下一页<br></br>
     *
     */
    operator fun next() {
        oldPageNo = pageNo
        pageNo++
        isPageLoading = true
    }

    /**
     *
     * [简要描述]:加载失败<br></br>
     * [详细描述]:加载失败<br></br>
     *
     */
    private fun loadFail() {
        isPageLoading = false
        pageNo = oldPageNo
    }

    /**
     *
     * [简要描述]:是第一个分页<br></br>
     * [详细描述]:是第一个分页<br></br>
     *
     * @return 分页标数
     */
    fun isFirstPage(): Boolean {
        return pageNo == FIRST_PAGE
    }

    /**
     *
     * [简要描述]:获取的数据<br></br>
     * [详细描述]:获取的数据<br></br>
     *
     * @return 一共加载的数据
     */
    fun getCusCursor(): Int {
        isPageLoading = true
        return (pageNo - 1) * pageSize + 1
    }

    /**
     *
     * [简要描述]:获取分页数<br></br>
     * [详细描述]:获取分页数<br></br>
     *
     * @return 分页数
     */
    fun getCusPageSize(): Int {
        return pageSize
    }

    /**
     *
     * [简要描述]:重置<br></br>
     * [详细描述]:重置<br></br>
     *
     */
    fun reset() {
        pageNo = FIRST_PAGE
        oldPageNo = FIRST_PAGE
        hasNext = true
    }
}